package com.easycar.common.util;

import android.content.Context;
import android.content.SharedPreferences;


/**
 * 光享 sharePreference
 */
public class PreferenceUtil {

    private static  final  String    PREFERENCE_NAME="light_easy_car";
    private static PreferenceUtil instance;
    private SharedPreferences mSharedPreferences;
    private SharedPreferences.Editor editor;


    private PreferenceUtil(Context mContext,String preferenceName) {
        mSharedPreferences = mContext.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
        editor = mSharedPreferences.edit();

    }

    public static PreferenceUtil getInstance(Context context, String preferenceName) {

        if (instance == null) {
            synchronized (PreferenceUtil.class) {
                if (instance == null) {
                    instance = new PreferenceUtil(context, preferenceName);
                }
            }
        }
        return instance;

    }



    public static PreferenceUtil getInstance(Context context) {
        return getInstance(context, context.getPackageName() + PREFERENCE_NAME);
    }



    /**

     * 得到SharedPreferences.Editor，如果之后的操作强烈依赖于存入的数据

     * 那么请用editor的commit方法进行提交。

     */

    public SharedPreferences.Editor getEditor() {

        return editor;

    }


    /**
     * 设置String类型的值  非原子性
     * @param key   键
     * @param value  值
     */
    public void putStringByApply(String key, String value) {

        editor.putString(key, value).apply();

    }


    /**
     *   设置String类型的值  原子性
     * @param key  键
     * @param value  值
     */

    public void putStringByCommit(String key, String value) {

        editor.putString(key, value).commit();

    }


    /**
     * 获取  String类型
     * @param key   键
     * @param defValue  默认值
     * @return
     */
    public String getString(String key, String defValue) {

        return mSharedPreferences.getString(key, defValue);

    }


    /**
     * 添加int 类型数据   非原子性
     * @param key  键
     * @param value  值
     */
    public void putIntByApply(String key, int value) {

        editor.putInt(key, value).apply();

    }


    /**
     *  添加 int 类型数据   原子性
     * @param key  键
     * @param value  值
     */
    public void putIntByCommit(String key, int value) {

        editor.putInt(key, value).commit();

    }


    /**
     * 获取 int 类型数据
     * @param key   键
     * @param defValue  默认值
     * @return
     */
    public int getInt(String key, int defValue) {

        return mSharedPreferences.getInt(key, defValue);

    }


    /**
     * 添加boolen  类型数据  非原子性
     * @param key  键
     * @param value  值
     */
    public void putBooleanByApply(String key, boolean value) {

        editor.putBoolean(key, value).apply();

    }


    /**
     * 添加boolen  类型数据  原子性
     * @param key  键
     * @param value  值
     */
    public void putBooleanByCommit(String key, boolean value) {

        editor.putBoolean(key, value).commit();

    }


    /**
     *  获取boolean    类型数据
     * @param key    键
     * @param defValue  默认值
     * @return  返回值
     */
    public boolean getBoolean(String key, boolean defValue) {

        return mSharedPreferences.getBoolean(key, defValue);

    }


    /**
     * 添加Long 类型数据  没有原子性
     * @param key  键
     * @param value  值
     */
    public void putLongByApply(String key, long value) {

        editor.putLong(key, value).apply();

    }



    /**
     * 添加Long 类型数据  原子性
     * @param key   键
     * @param value  值
     */
    public void putLongByCommit(String key, long value) {

        editor.putLong(key, value).commit();

    }


    /**
     * 获取保存的Long 类型数据
     * @param key  键
     * @param defValue    默认值
     * @return   Long 类型数据
     */
    public long getLong(String key, long defValue) {

        return mSharedPreferences.getLong(key, defValue);

    }



    /////// remove ////////


    /**
     * 清除某个值  没有同步原子
     */
    public void removeByApply(String key) {

        editor.remove(key).apply();

    }



    /**
     * 清除某个值  原子
     */
    public void removeByCommit(String key) {

        editor.remove(key).commit();

    }


    /**
     * 清除数据   没有同步原子
     */
    public void clearByApply() {
        editor.clear().apply();

    }


    /**
     * 清除数据   同步原子
     */

    public void clearByCommit() {

        editor.clear().commit();

    }





}
